package http;

/**
 * @Author: Cjj
 * HTTP协议
 */
public class HTTP {
    /**
     * 协议是
     * 超文本传输协议
     * 无状态的
     * 请求/应答方式的
     * 可扩展的
     * 与基于网络的超文本信息系统灵活的互动
     */

    /**
     * HTTP报文格式
     * HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成
     * 1.起始行：描述请求或响应的基本信息
     * 2.消息正文：实际传输的数据，它不一定是纯文本,可以是图片,视频等二进制数据
     */


    /**
     * HTTP请求过程
     * 当用户在浏览器输入网站回车之后,网络协议都做了哪些工作呢.
     * 1.1 首先干活的是浏览器应用程序,要解析出URL中的域名
     * 1.2 若没有,搜索操作系统中的缓存
     * 1.3 若没有,搜索操作系统中hosts文件
     * 1.3 若没有,操作系统将域名解析请求发送值本地域名服务器(递归查询),本地域名服务器查询自己的DNS缓存,成功则返回IP地址
     * 若没有则向根域名服务器域名解析请求发给根域名服务器。
     * 1.3.2 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器地址。
     * 1.3.3 本地域名服务器向顶级域名服务器发起请求。
     *1.3.4  顶级域名服务器告诉本地域名服务器该去那个权限域名服务器查询
     * 1.3.5 本地域名服务器向权限域名服务器放弃请求
     * 1.3.6 权限域名服务器查询映射表,返回给本地域名服务器 域名对应的对应IP地址
     * 1.3.7 本地域名服务器缓存结果,并将查询结果返回给主机操作系统;
     * 1.4 操作系统将IP地址返回给浏览器,并缓存查询结果
     * 1.5 至此浏览器得到域名对应的IP地址
     *
     * 2.三次握手建立TCP连接
     * 3.浏览器向服务器发送HTTP请求报文
     * 4.服务器接收并解析HTTP请求,查找资源,返回HTTP响应消息
     * 5.浏览器收到响应之后,开始渲染页面
     */

    /**
     * HTTPS
     * 由于HTTP天生“明文”的特点,整个传输过程完全透明,任何人都能够在链路中截获,修改或者伪造请求/响应报文,数据不具有可信性。
     * 因此就诞生了为安全而生的HTTPS协议。
     * 使用HTTPS时,所有的HTTP请求和响应在发送到网络之前都要进行加密
     * SSL/TLS协议是HTTPS的基础,它提供了一种安全可靠、可扩展的加密通信协议。
     * SSL即安全套接层,后面改名为TLS
     * 摘要算法
     *   能够把任意长度的数据"压缩"成固定长度,而且独一无二的"摘要"字符串,就好像是给这段数据生成了一个数字"指纹"
     *   任意微小的数据差异,都可以生成完全不同的摘要,所以可以通过把明文信息的摘要和明文一起加密进行传输,数据传输到对方之后
     *   在进行解密,重新对数据进行摘要,再比对就能发现数据也没有被篡改。这样就 保证了数据的完整性
     *
     * 加密算法
     *   对称密钥加密算法：编 解码使用相同密钥的算法
     *   非对称密码加密算法：它有两个密钥,一个叫"公钥",一个叫"私钥"
     *   两个密钥是不同的,一个用于解密,一个用于加密。(公钥可以公开给任何人使用,私钥必须严格保密)
     *   非对称加密可以解决"密钥交换"的问题。网站秘密保管私钥,在网上任意分发公钥,你想要登录网站只要用公钥
     *   加密就行了,密文只能由私钥持有者才能解密。而黑客因为没有私钥,所以就无法破解密文。非对称密钥加密
     *   系统通常需要大量是数学运算,比较慢。
     */


}
